package db

import (
	"GoControalBackend/common/config"
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

var Db *gorm.DB

// SetupDBLink 初始化数据库
func SetupDBLink() error {
	// 定义错误变量
	var err error
	// 从配置中获取数据库配置
	var dbConfig = config.Config.Db
	// 格式化数据库连接URL
	url := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=True&loc=Local",
		dbConfig.Username,
		dbConfig.Password,
		dbConfig.Host,
		dbConfig.Port,
		dbConfig.Db,
		dbConfig.Charset)
	// 使用gorm库打开数据库连接
	Db, err := gorm.Open(mysql.Open(url), &gorm.Config{
		Logger:                                   logger.Default.LogMode(logger.Info),
		DisableForeignKeyConstraintWhenMigrating: true,
	})
	// 如果打开数据库连接时发生错误，触发panic
	if err != nil {
		panic(err)
	}
	// 如果数据库连接对象中存在错误，触发panic
	if Db.Error != nil {
		panic(Db.Error)
	}
	// 获取底层的sql.DB对象
	sqlDB, err := Db.DB()
	// 设置最大空闲连接数
	sqlDB.SetMaxIdleConns(dbConfig.MaxIdle)
	// 设置最大打开连接数
	sqlDB.SetMaxOpenConns(dbConfig.MaxOpen)
	// 返回nil表示成功
	return nil
}
